
import Vue from 'vue'
import Router from 'vue-router'
import { constantRoutes } from './routes'
import store from '@/store'
import { getToken } from '@/utils/auth'

Vue.use(Router)

// 创建路由实例
const createRouter = () => new Router({
  mode: 'history',
  scrollBehavior: () => ({ y: 0 }),
  routes: constantRoutes
})

const router = createRouter()

// 重置路由
export function resetRouter () {
  const newRouter = createRouter()
  router.matcher = newRouter.matcher
}

// 路由守卫（简化版）
router.beforeEach(async (to, from, next) => {
  // 设置页面标题
  const setTitle = () => {
    if (!to.meta?.title) return
    const baseTitle = to.path.startsWith('/system')
      ? '系统管理'
      : '论坛管理'
    document.title = `${to.meta.title} - ${baseTitle}`
  }

  // 开发环境特殊处理
  if (process.env.NODE_ENV === 'development') {
    setTitle()
    return next()
  }

  // 锁屏页特殊处理
  if (to.path === '/lock') {
    return to.query.redirect
      ? next()
      : next({ path: '/lock', query: { redirect: from.fullPath || '/' } })
  }

  // 免认证路由直接放行
  if (to.meta?.noAuth) {
    setTitle()
    return next()
  }

  // 未登录处理
  if (!getToken()) {
    return to.path === '/login' ? next() : next('/login')
  }

  // 已登录禁止访问登录页
  if (to.path === '/login') {
    return next('/')
  }

  // 设置标题
  setTitle()

  // 如果路由已加载则直接放行
  if (store.getters['permission/isRoutesLoaded']) {
    return next()
  }

  // 加载动态路由
  try {
    // 不再传入roles参数，因为不需要权限验证
    await store.dispatch('permission/generateRoutes')

    // 重新导航以确保路由生效
    return next({ ...to, replace: true })
  } catch (error) {
    console.error('路由加载失败:', error)
    return next('/error')
  }
})

// 修复重复导航报错
const originalPush = Router.prototype.push
Router.prototype.push = function push (location) {
  return originalPush.call(this, location).catch(err => err)
}

export default router

